package com.miplus.ccrm.core.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;

/**
 * 信用卡催收分期信息表
 * @TableName credit_account_amort
 */
@TableName(value ="credit_account_amort")
@Data
public class CreditAccountAmort implements Serializable {
    /**
     * 序号
     */
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 客户号
     */
    private String custNo;

    /**
     * 卡号
     */
    private String cardNo;

    /**
     * 账号
     */
    private String acct;

    /**
     * 分期序号
     */
    private String amortSeqNum;

    /**
     * 分期时间
     */
    private Date amortDt;

    /**
     * 分期金额
     */
    private BigDecimal amortTotalPrin;

    /**
     * 分期期数
     */
    private String amortTerms;

    /**
     * 累计已摊销本金
     */
    private BigDecimal aggreHaveAmortPrin;

    /**
     * 累计已摊销利息
     */
    private BigDecimal aggreHaveAmortInt;

    /**
     * 累计已摊销费用
     */
    private BigDecimal aggreHaveAmortFee;

    /**
     * 每期应还款额
     */
    private BigDecimal monthlyAmortAmt;

    /**
     * 每期应还本金
     */
    private BigDecimal monthlyAmortPrin;

    /**
     * 每期应还利息
     */
    private BigDecimal monthlyAmortInt;

    /**
     * 每期应还分期手续费
     */
    private BigDecimal monthlyAmortFee;

    /**
     * 剩余分期期数
     */
    private BigDecimal remainTerms;

    /**
     * 剩余分期付款本金
     */
    private BigDecimal remainUnbackPrin;

    /**
     * 剩余分期未还费用
     */
    private BigDecimal remainUnbackFee;

    /**
     * 分期类型
     */
    private String amortType;

    /**
     * 分期状态
     */
    private String amortPayStatus;

    /**
     * 分期计划
     */
    private String credpId;

    /**
     * 
     */
    private Date crdt;

    /**
     * 
     */
    private Date mddt;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    @Override
    public boolean equals(Object that) {
        if (this == that) {
            return true;
        }
        if (that == null) {
            return false;
        }
        if (getClass() != that.getClass()) {
            return false;
        }
        CreditAccountAmort other = (CreditAccountAmort) that;
        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
            && (this.getCustNo() == null ? other.getCustNo() == null : this.getCustNo().equals(other.getCustNo()))
            && (this.getCardNo() == null ? other.getCardNo() == null : this.getCardNo().equals(other.getCardNo()))
            && (this.getAcct() == null ? other.getAcct() == null : this.getAcct().equals(other.getAcct()))
            && (this.getAmortSeqNum() == null ? other.getAmortSeqNum() == null : this.getAmortSeqNum().equals(other.getAmortSeqNum()))
            && (this.getAmortDt() == null ? other.getAmortDt() == null : this.getAmortDt().equals(other.getAmortDt()))
            && (this.getAmortTotalPrin() == null ? other.getAmortTotalPrin() == null : this.getAmortTotalPrin().equals(other.getAmortTotalPrin()))
            && (this.getAmortTerms() == null ? other.getAmortTerms() == null : this.getAmortTerms().equals(other.getAmortTerms()))
            && (this.getAggreHaveAmortPrin() == null ? other.getAggreHaveAmortPrin() == null : this.getAggreHaveAmortPrin().equals(other.getAggreHaveAmortPrin()))
            && (this.getAggreHaveAmortInt() == null ? other.getAggreHaveAmortInt() == null : this.getAggreHaveAmortInt().equals(other.getAggreHaveAmortInt()))
            && (this.getAggreHaveAmortFee() == null ? other.getAggreHaveAmortFee() == null : this.getAggreHaveAmortFee().equals(other.getAggreHaveAmortFee()))
            && (this.getMonthlyAmortAmt() == null ? other.getMonthlyAmortAmt() == null : this.getMonthlyAmortAmt().equals(other.getMonthlyAmortAmt()))
            && (this.getMonthlyAmortPrin() == null ? other.getMonthlyAmortPrin() == null : this.getMonthlyAmortPrin().equals(other.getMonthlyAmortPrin()))
            && (this.getMonthlyAmortInt() == null ? other.getMonthlyAmortInt() == null : this.getMonthlyAmortInt().equals(other.getMonthlyAmortInt()))
            && (this.getMonthlyAmortFee() == null ? other.getMonthlyAmortFee() == null : this.getMonthlyAmortFee().equals(other.getMonthlyAmortFee()))
            && (this.getRemainTerms() == null ? other.getRemainTerms() == null : this.getRemainTerms().equals(other.getRemainTerms()))
            && (this.getRemainUnbackPrin() == null ? other.getRemainUnbackPrin() == null : this.getRemainUnbackPrin().equals(other.getRemainUnbackPrin()))
            && (this.getRemainUnbackFee() == null ? other.getRemainUnbackFee() == null : this.getRemainUnbackFee().equals(other.getRemainUnbackFee()))
            && (this.getAmortType() == null ? other.getAmortType() == null : this.getAmortType().equals(other.getAmortType()))
            && (this.getAmortPayStatus() == null ? other.getAmortPayStatus() == null : this.getAmortPayStatus().equals(other.getAmortPayStatus()))
            && (this.getCredpId() == null ? other.getCredpId() == null : this.getCredpId().equals(other.getCredpId()))
            && (this.getCrdt() == null ? other.getCrdt() == null : this.getCrdt().equals(other.getCrdt()))
            && (this.getMddt() == null ? other.getMddt() == null : this.getMddt().equals(other.getMddt()));
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
        result = prime * result + ((getCustNo() == null) ? 0 : getCustNo().hashCode());
        result = prime * result + ((getCardNo() == null) ? 0 : getCardNo().hashCode());
        result = prime * result + ((getAcct() == null) ? 0 : getAcct().hashCode());
        result = prime * result + ((getAmortSeqNum() == null) ? 0 : getAmortSeqNum().hashCode());
        result = prime * result + ((getAmortDt() == null) ? 0 : getAmortDt().hashCode());
        result = prime * result + ((getAmortTotalPrin() == null) ? 0 : getAmortTotalPrin().hashCode());
        result = prime * result + ((getAmortTerms() == null) ? 0 : getAmortTerms().hashCode());
        result = prime * result + ((getAggreHaveAmortPrin() == null) ? 0 : getAggreHaveAmortPrin().hashCode());
        result = prime * result + ((getAggreHaveAmortInt() == null) ? 0 : getAggreHaveAmortInt().hashCode());
        result = prime * result + ((getAggreHaveAmortFee() == null) ? 0 : getAggreHaveAmortFee().hashCode());
        result = prime * result + ((getMonthlyAmortAmt() == null) ? 0 : getMonthlyAmortAmt().hashCode());
        result = prime * result + ((getMonthlyAmortPrin() == null) ? 0 : getMonthlyAmortPrin().hashCode());
        result = prime * result + ((getMonthlyAmortInt() == null) ? 0 : getMonthlyAmortInt().hashCode());
        result = prime * result + ((getMonthlyAmortFee() == null) ? 0 : getMonthlyAmortFee().hashCode());
        result = prime * result + ((getRemainTerms() == null) ? 0 : getRemainTerms().hashCode());
        result = prime * result + ((getRemainUnbackPrin() == null) ? 0 : getRemainUnbackPrin().hashCode());
        result = prime * result + ((getRemainUnbackFee() == null) ? 0 : getRemainUnbackFee().hashCode());
        result = prime * result + ((getAmortType() == null) ? 0 : getAmortType().hashCode());
        result = prime * result + ((getAmortPayStatus() == null) ? 0 : getAmortPayStatus().hashCode());
        result = prime * result + ((getCredpId() == null) ? 0 : getCredpId().hashCode());
        result = prime * result + ((getCrdt() == null) ? 0 : getCrdt().hashCode());
        result = prime * result + ((getMddt() == null) ? 0 : getMddt().hashCode());
        return result;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", custNo=").append(custNo);
        sb.append(", cardNo=").append(cardNo);
        sb.append(", acct=").append(acct);
        sb.append(", amortSeqNum=").append(amortSeqNum);
        sb.append(", amortDt=").append(amortDt);
        sb.append(", amortTotalPrin=").append(amortTotalPrin);
        sb.append(", amortTerms=").append(amortTerms);
        sb.append(", aggreHaveAmortPrin=").append(aggreHaveAmortPrin);
        sb.append(", aggreHaveAmortInt=").append(aggreHaveAmortInt);
        sb.append(", aggreHaveAmortFee=").append(aggreHaveAmortFee);
        sb.append(", monthlyAmortAmt=").append(monthlyAmortAmt);
        sb.append(", monthlyAmortPrin=").append(monthlyAmortPrin);
        sb.append(", monthlyAmortInt=").append(monthlyAmortInt);
        sb.append(", monthlyAmortFee=").append(monthlyAmortFee);
        sb.append(", remainTerms=").append(remainTerms);
        sb.append(", remainUnbackPrin=").append(remainUnbackPrin);
        sb.append(", remainUnbackFee=").append(remainUnbackFee);
        sb.append(", amortType=").append(amortType);
        sb.append(", amortPayStatus=").append(amortPayStatus);
        sb.append(", credpId=").append(credpId);
        sb.append(", crdt=").append(crdt);
        sb.append(", mddt=").append(mddt);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
    }
}